import unicodedata
import sys
from Npp import notepad

def convert_text(text, direction):
    """
    转换文本的全角/半角状态
    
    参数:
    text (str): 要转换的文本
    direction (str): 'full2half' 全角转半角, 'half2full' 半角转全角
    """
    if direction == 'full2half':
        # 全角转半角
        return unicodedata.normalize('NFKC', text)
    elif direction == 'half2full':
        # 半角转全角
        return ''.join([chr(ord(c) + 0xFEE0) if 0x21 <= ord(c) <= 0x7E else c for c in text])
    else:
        return text  # 未知方向不转换

def full_half_convert(direction):
    """执行转换并替换文本"""
    editor.beginUndoAction()
    
    # 获取选中内容，无选中则处理全文
    text = editor.getSelText() if editor.getSelectionEmpty() == False else editor.getText()
    
    # 执行转换
    converted = convert_text(text, direction)
    
    # 替换内容
    if editor.getSelectionEmpty() == False:
        editor.replaceSel(converted)
    else:
        editor.setText(converted)
    
    editor.endUndoAction()

# 主函数 - 全角转半角
def full_to_half():
    full_half_convert('full2half')

# 主函数 - 半角转全角
def half_to_full():
    full_half_convert('half2full')

# 主函数 - 交互式选择（可选功能）
def interactive_convert():
    choice = notepad.prompt("选择转换方向:\n1. 全角转半角\n2. 半角转全角", "全角半角转换", 1)
    if choice == 1:
        full_to_half()
    elif choice == 2:
        half_to_full()